{
 "cells": [
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "### (x,y) 到$ 直线Ax+By+C的距离为\\ \\frac{|Ax+By+C|}{\\sqrt{A^2+B^2}}$\n",
    "### 拓展到n维空间 $\\theta^T x_b=0 ---> w^Tx+b=0$\n",
    "### $\\frac{w^Tx+b}{\\|w\\|}, \\|w\\|=\\sqrt{w^2_1+w^2_2+\\dots+w^2_n}$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Hard Margin SVM :\n",
    "### $min\\frac{1}{2}\\|w\\|^2$\n",
    "### $s.t.\\ \\ \\ y^{(i)}(w^Tx^{(i)}+b) \\geq 1$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Soft Margin SVM :\n",
    "### $min\\frac{1}{2}\\|w\\|^2 + C \\sum_{i=1}^m\\zeta_i$  , 多了一个L1正则化项(C是一个新的超参数)\n",
    "C越小,容错空间越大, 越hard\n",
    "### $min\\frac{1}{2}\\|w\\|^2 + C \\sum_{i=1}^m\\zeta_i^2$  , L2正则\n",
    "### $s.t.\\ \\ \\ y^{(i)}(w^Tx^{(i)}+b) \\geq 1-\\zeta_i$\n",
    "#### $\\zeta_i \\geq 0$"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# 注意!使用SVM要做数据标准化处理"
   ]
  },
  {
   "cell_type": "markdown",
   "metadata": {},
   "source": [
    "# Scikit-learn中的SVM"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 1,
   "metadata": {},
   "outputs": [],
   "source": [
    "import numpy as np\n",
    "import matplotlib.pyplot as plt"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 2,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn import datasets"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 3,
   "metadata": {},
   "outputs": [],
   "source": [
    "iris = datasets.load_iris()\n",
    "X = iris.data\n",
    "y = iris.target\n",
    "\n",
    "X = X[y<2, :2]\n",
    "y = y[y<2]"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 4,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "image/png": "iVBORw0KGgoAAAANSUhEUgAAAXcAAAD8CAYAAACMwORRAAAABHNCSVQICAgIfAhkiAAAAAlwSFlzAAALEgAACxIB0t1+/AAAADl0RVh0U29mdHdhcmUAbWF0cGxvdGxpYiB2ZXJzaW9uIDIuMS4yLCBodHRwOi8vbWF0cGxvdGxpYi5vcmcvNQv5yAAAF1hJREFUeJzt3W+MXFd5x/Hv45kUMDREIqsSxX9WFYi2oBDiVQhNhUJsqhAs8wKqplpKg1q5eEMJLRV/GilVLSFUIVGgYKMlqEpqt4QGaANKaZsAhb4g1TokgWBaBWonTmizSUrS1G0q209f3Lt4d3Z25p6ZOTPnnPl9pKuduXN89zn3Xj++Pve5Z8zdERGRsmyadAAiIjJ6Su4iIgVSchcRKZCSu4hIgZTcRUQKpOQuIlIgJXcRkQIpuYuIFEjJXUSkQO2mDc2sBSwBj7j77o7PrgU+DDxSr/qEu9/Ua3vnn3++z87OBgUrIjLtjhw58ri7z/Rr1zi5A9cDR4FzN/j8Vnd/Z9ONzc7OsrS0FPDrRUTEzI43addoWMbMtgBvBHpejYuISBqajrl/FHgvcKZHmzeb2f1mdpuZbe3WwMz2mtmSmS0tLy+HxioiIg31Te5mtht4zN2P9Gj2JWDW3S8C7gRu7tbI3Rfdfc7d52Zm+g4ZiYjIgJpcuV8O7DGzY8BngSvN7NDqBu7+hLs/W7/9NLBjpFGKiEiQvsnd3T/g7lvcfRa4Bviqu791dRszu2DV2z1UN15FRGRCQqpl1jCz/cCSu98OvMvM9gCngCeBa0cTnoiIDCLoISZ3//pKjbu731gn9pWr+5e7+yvd/XXu/v0YwYpMxOHDMDsLmzZVPw8fnnREIn0NfOUuMhUOH4a9e+Hkyer98ePVe4D5+cnFJdKHph8Q6eWGG84m9hUnT1brRRKm5C7Sy0MPha0XSYSSu0gv27aFrRdJhJK7SC8f/CBs3rx23ebN1XqRhCm5i/QyPw+Li7B9O5hVPxcXdTNVkqdqGZF+5ueVzCU7unIXESmQkruISIGU3EVECqTkLiJSICV3EZECKbmLiBRIyV1EpEBK7iIiBVJyFxEpkJK7lENfqiHyE5p+QMqgL9UQWUNX7lIGfamGyBpK7lIGfamGyBpK7lIGfamGyBpK7lIGfamGyBpK7lIGfamGyBqqlpFy6Es1RH5CV+4yPNWXiyRHV+4yHNWXiyRJV+4yHNWXiyRJyV2Go/pykSQpuctwVF8ukiQldxmO6stFkqTkLsNRfblIkhpXy5hZC1gCHnH33R2fPQe4BdgBPAH8qrsfG2GckjLVl4skJ+TK/Xrg6Aaf/Sbwn+7+EuBPgD8eNjCRLKnmXxLRKLmb2RbgjcBNGzR5E3Bz/fo2YKeZ2fDhiWRkpeb/+HFwP1vzrwQvE9D0yv2jwHuBMxt8fiHwMIC7nwKeAl40dHQiOVHNvySkb3I3s93AY+5+pFezLuu8y7b2mtmSmS0tLy8HhCmSAdX8S0KaXLlfDuwxs2PAZ4ErzexQR5sTwFYAM2sDLwSe7NyQuy+6+5y7z83MzAwVuEhyVPMvCemb3N39A+6+xd1ngWuAr7r7Wzua3Q78Rv36LXWbdVfuIkVTzb8kZOA6dzPbb2Z76refAV5kZg8Cvwe8fxTBiWRFNf+SEJvUBfbc3JwvLS1N5HeLiOTKzI64+1y/dnpCVdK1sADtdnUV3G5X70WkEc3nLmlaWICDB8++P3367PsDByYTk0hGdOUuaVpcDFsvImsouUuaTp8OWy8iayi5S5parbD1IrKGkrukaeV7WJuuF5E1dENV0rRy03RxsRqKabWqxK6bqSKNKLlLug4cUDIXGZCGZaS7Xbuq+vKVZdeuSUc0OZqjXTKk5C7r7doFd921dt1dd01ngtcc7ZIpTT8g6/X6npVpmw9udrZK6J22b4djx8YdjYimHxAZCc3RLplSchfpRXO0S6aU3GW9nTvD1pdMc7RLppTcZb0771yfyHfurNZPG83RLpnSDVURkYzohqoMJ1Ztd8h2VV8uMjA9oSrrrdR2nzxZvV+p7YbhhiNCthsrBpEpoWEZWS9WbXfIdlVfLtKVhmVkcLFqu0O2q/pykaEouct6sWq7Q7ar+nKRoSi5y3qxartDtqv6cpGhKLnLerFqu0O2q/pykaHohqqISEZ0QzW2HGuwc4xZRAaiOvdB5FiDnWPMIjIwDcsMIsca7BxjFpF1NCwTU4412DnGLCIDU3IfRI412DnGLCIDU3IfRI412DnGLCIDU3IfRI412DnGLCID63tD1cyeC3wDeA5Vdc1t7v6HHW2uBT4MPFKv+oS739Rru1nfUBURmZBR3lB9FrjS3V8JXAxcZWaXdWl3q7tfXC89E7tMyMICtNvVlXu7Xb0fRdtU6udTiUMkAX3r3L26tH+mfntOvUymflIGt7AABw+efX/69Nn3Bw4M3jaV+vlU4hBJRKM6dzNrAUeAlwCfdPf3dXx+LfAhYBn4V+B33f3hXtvUsMyYtdtVku7UasGpU4O3TaV+PpU4RCIbaZ27u59294uBLcClZvaKjiZfAmbd/SLgTuDmDYLaa2ZLZra0vLzc5FfLqHRL1hutD2mbSv18KnGIJCKoWsbdfwx8HbiqY/0T7v5s/fbTwI4N/vyiu8+5+9zMzMwA4crAWq3m60PaplI/n0ocIonom9zNbMbMzqtfPw/YBXy/o80Fq97uAY6OMkgZgZXx5ybrQ9qmUj+fShwiqXD3ngtwEfBt4H7gu8CN9fr9wJ769YeAB4D7gK8BP9dvuzt27HAZs3373Fstd6h+7ts3mraHDrlv3+5uVv08dGjUkTeTShwiEQFL3ie/ursmDhMRyYkmDostVk11SH15zG2H9C/HfZEZlfBLsCaX9zGWrIdlDh1y37y5GrJYWTZvHn4YYN++tdtcWXoNicTYdkj/ctwXmYm1iyVPaFgmolg11SH15TG3HdK/HPdFZlTCL6s1HZZRch/Epk3VBVQnMzhzZvDtmm382bDHKWTbIf3LcV9kJtYuljxpzD2mWDXVIfXlMbcd0r8c90VmVMIvg1ByH0SsmuqQ+vKY2w7pX477IjMq4ZeBNBmYj7FkfUPVPV5NdUh9ecxth/Qvx32RGZXwywp0Q1VEpDwac5f1Uqhdl6zptMhH3/ncpRAh851rbnTpQqdFXjQsMy1SqF2XrOm0SIOGZWStkPnONTe6dKHTIi9K7tMihdp1yZpOi7wouU+LFGrXJWs6LfKi5D4t5udhcbEaIDWrfi4udr8TFtJWpoZOi7zohqqISEZ0Q3VFrMLckO2mMi+5ipSTUvrhKL1/ISayL5o8xhpjGcv0A7Emwg7ZbirzkmtS8KSUfjhK71+IUe8LNP0A8QpzQ7abyrzkKlJOSumHo/T+hRj1vtB87hBvIuyQ7aYyL7kmBU9K6Yej9P6FGPW+0Jg7xCvMDdluKvOSq0g5KaUfjtL7F2JS+6Ls5B6rMDdku6nMS64i5aSUfjhK71+Iie2LJgPzMZaxzeceayLskO2mMi+5JgVPSumHo/T+hRjlvkA3VEVEyqMx99hSqJ/ftau6K7Oy7No1mhhEChLrMZPk6/ibXN7HWLL+mr0U6ud37uxeP79z53AxiBQk1mMmk6zjR8MyEaVQP59KiaVIwmI9ZjLJOn4Ny8QUa2JrTZgtMlLdEnuv9U3l8FdVyX0QKdTPi0hfsR4zyeGvqpL7IFKon9+5s/s2NlovMoViPWaSRR1/k4H5GEvWN1Td06if77ypqpupIuvEesxkUnX86IaqiEh5RnZD1cyea2b/bGb3mdkDZvZHXdo8x8xuNbMHzexuM5sdLOwGQotLky9G7RBSlFv4vogZbszd3FTM/mV2qIMUftqPTr9Le8CAF9SvzwHuBi7raLMAfKp+fQ1wa7/tDjQsE1pcmtuk0iFFuYXvi5jhxtzNTcXsX2aHOkjhp30jNByWCRonBzYD9wCv7lj/d8Br6tdt4HHq6YQ3WgZK7tu3d/9buX37aNpP2srAYOfSaq1vW/i+iBluzN3cVMz+ZXaogxR+2jfSNLk3GnM3sxZwBHgJ8El3f1/H598FrnL3E/X7H9T/ADze0W4vsBdg27ZtO453ewqgl9CJkXObVDrkwaTC90XMcGPu5qZi9i+zQx2k8NO+kZE+xOTup939YmALcKmZvaLz93X7Y122s+juc+4+NzMz0+RXrxVaXJpDMepqIUW5he+LmOHG3M1NxexfZoc6SOGn/UgF1bm7+4+BrwNXdXx0AtgKYGZt4IXAkyOIb63Q4tIsilFXCSnKLXxfxAw35m5uKmb/MjvUQQo/7Uer37gNMAOcV79+HvBNYHdHm+tYe0P1c/22O3Cde2hxaW6TSocU5Ra+L2KGG3M3NxWzf5kd6iCFn/Z9MaoxdzO7CLgZaFFd6X/O3feb2f76l9xuZs8F/hx4FdUV+zXu/sNe21Wdu4hIuKZj7u1+Ddz9fqqk3bn+xlWv/xf4ldAgRUQkjvLnlpnaJxikl5DTIoVTKOaDO7k9pJXC8chCk7GbGMtY5pYp8QkGGVrIaZHCKRTzwZ3cHtJK4XhMGppbhsnOqC/JCjktUjiFQmNIoX+5bTcnTcfcy07uJT7BIEMLOS1SOIViPriT20NaKRyPSdM3McF0P8EgGwo5LVI4hWI+uJPbQ1opHI9clJ3cp/oJBtlIyGmRwikU88Gd3B7SSuF4ZKPJwHyMZWxf1lHaEwwyEiGnRQqnUMwHd3J7SCuF4zFJ6IaqiEh5NOYuMiIhX+yRitxiTqV2PZU4RqLJ5X2MJfvvUJWpEPLFHqnILeZUatdTiaMfNCwjMrx2G06fXr++1YJTp8YfTxO5xZxK7XoqcfSjYRmREeiWJHutT0FuMT/0UNj60uMYFSV3kR5CvtgjFbnFnErteipxjIqSu0gPIV/skYrcYk6ldj2VOEamycB8jEU3VCUXIV/skYrcYk6ldj2VOHpBN1RFRMqjG6oyNjnWBseKOVZ9eY77WCasyeV9jEXDMmXIpTZ4tVgxx6ovz3EfSzxoWEbGIZfa4NVixRyrvjzHfSzxaFhGxiLH2uBYMceqL89xH8vkKbnLUHKsDY4Vc6z68hz3sUyekrsMJcfa4Fgxx6ovz3EfSwKaDMzHWHRDtRw51AZ3ihVzrPryHPexxIFuqIqIlEc3VGXqxKoFD9mu6tElFe1JByAyCocPV2PbJ09W748fPzvWPT8/nu3GikFkEBqWkSLEqgUP2a7q0WUcNCwjUyVWLXjIdlWPLilRcpcixKoFD9mu6tElJUruUoRYteAh21U9uqREyV2KMD8Pi4vV+LZZ9XNxcfgbmSHbjRWDyCD63lA1s63ALcCLgTPAort/rKPNFcDfAP9Wr/qCu+/vtV3dUBURCTfKG6qngPe4+88DlwHXmdkvdGn3TXe/uF56JnZJX4712qpHj0/7LSNNHmNdvVBdob++Y90VwJdDtqPpB9KV4/zhITHn2L8UaL+lgRjTD5jZLPAN4BXu/vSq9VcAnwdOAI8Cv+/uD/TaloZl0pVjvbbq0ePTfktD02GZxsndzF4A/CPwQXf/Qsdn5wJn3P0ZM7sa+Ji7v7TLNvYCewG2bdu243i3M0UmbtOm6rqskxmcOTP+eJoIiTnH/qVA+y0NI32IyczOoboyP9yZ2AHc/Wl3f6Z+fQdwjpmd36XdorvPufvczMxMk18tE5Bjvbbq0ePTfstL3+RuZgZ8Bjjq7h/ZoM2L63aY2aX1dp8YZaAyPjnWa6sePT7tt8z0G5QHfglw4H7g3nq5GngH8I66zTuBB4D7gG8Bv9hvu7qhmrYc5w8PiTnH/qVA+23y0HzuIiLl0cRhU0A1x2stLEC7Xd3ga7er9yLTSvO5Z0pzh6+1sAAHD559f/r02fcHDkwmJpFJ0rBMplRzvFa7XSX0Tq0WnDo1/nhEYtGwTOE0d/ha3RJ7r/UipVNyz5RqjtdqtcLWi5ROyT1Tqjlea+V+Q9P1IqVTcs+U5g5f68AB2Lfv7JV6q1W9181UmVa6oSoikhHdUB1E4YXjhXev+P6lQPs4I00eY42xJDf9QOGTVRfeveL7lwLt4zSg6QcCFV44Xnj3iu9fCrSP0zDy+dxHLbnkXvhk1YV3r/j+pUD7OA0acw9VeOF44d0rvn8p0D7Oi5L7isILxwvvXvH9S4H2cV6U3FcUXjheePeK718KtI/zojF3EZGMaMxdpCAx68tVu14mzecukriYc/frewHKpWEZkcTFrC9X7Xp+NCwjUoiYc/frewHKpeQukriY9eWqXS+XkrtI4mLWl6t2vVxK7iKJi1lfrtr1cumGqohIRnRDVURkiim5i4gUSMldRKRASu4iIgVSchcRKZCSu4hIgZTcRUQKpOQuIlKgvsndzLaa2dfM7KiZPWBm13dpY2b2cTN70MzuN7NL4oQrw9C83SLTo8l87qeA97j7PWb208ARM/sHd//eqjZvAF5aL68GDtY/JRGat1tkuvS9cnf3H7n7PfXr/wKOAhd2NHsTcItXvgWcZ2YXjDxaGdgNN5xN7CtOnqzWi0h5gsbczWwWeBVwd8dHFwIPr3p/gvX/AGBme81sycyWlpeXwyKVoWjebpHp0ji5m9kLgM8D73b3pzs/7vJH1s1I5u6L7j7n7nMzMzNhkcpQNG+3yHRplNzN7ByqxH7Y3b/QpckJYOuq91uAR4cPT0ZF83aLTJcm1TIGfAY46u4f2aDZ7cDb6qqZy4Cn3P1HI4xThqR5u0WmS5NqmcuBXwe+Y2b31uv+ANgG4O6fAu4ArgYeBE4Cbx99qDKs+Xklc5Fp0Te5u/s/0X1MfXUbB64bVVAiIjIcPaEqIlIgJXcRkQIpuYuIFEjJXUSkQEruIiIFUnIXESmQkruISIGsKlGfwC82WwaOT+SX93c+8Pikg4hI/ctXyX0D9a+J7e7ed3KuiSX3lJnZkrvPTTqOWNS/fJXcN1D/RknDMiIiBVJyFxEpkJJ7d4uTDiAy9S9fJfcN1L+R0Zi7iEiBdOUuIlKgqU7uZtYys2+b2Ze7fHatmS2b2b318luTiHEYZnbMzL5Tx7/U5XMzs4+b2YNmdr+ZXTKJOAfRoG9XmNlTq47fjZOIc1Bmdp6Z3WZm3zezo2b2mo7Psz120Kh/2R4/M3vZqrjvNbOnzezdHW2iH78mX9ZRsuuBo8C5G3x+q7u/c4zxxPA6d9+orvYNwEvr5dXAwfpnLnr1DeCb7r57bNGM1seAr7j7W8zsp4COL0nM/tj16x9kevzc/V+Ai6G6gAQeAb7Y0Sz68ZvaK3cz2wK8Ebhp0rFM0JuAW7zyLeA8M7tg0kFNOzM7F3gt1ddb4u7/5+4/7miW7bFr2L9S7AR+4O6dD2xGP35Tm9yBjwLvBc70aPPm+r9Mt5nZ1h7tUuXA35vZETPb2+XzC4GHV70/Ua/LQb++AbzGzO4zs781s5ePM7gh/SywDPxZPWx4k5k9v6NNzseuSf8g3+O32jXAX3ZZH/34TWVyN7PdwGPufqRHsy8Bs+5+EXAncPNYghuty939Eqr/Al5nZq/t+Lzb1yfmUj7Vr2/3UD2m/UrgT4G/HneAQ2gDlwAH3f1VwH8D7+9ok/Oxa9K/nI8fAPVw0x7gr7p93GXdSI/fVCZ3qi/93mNmx4DPAlea2aHVDdz9CXd/tn77aWDHeEMcnrs/Wv98jGrM79KOJieA1f8j2QI8Op7ohtOvb+7+tLs/U7++AzjHzM4fe6CDOQGccPe76/e3USXDzjZZHjsa9C/z47fiDcA97v4fXT6LfvymMrm7+wfcfYu7z1L9t+mr7v7W1W06xr/2UN14zYaZPd/MfnrlNfDLwHc7mt0OvK2+c38Z8JS7/2jMoQZr0jcze7GZWf36Uqpz/YlxxzoId/934GEze1m9aifwvY5mWR47aNa/nI/fKr9G9yEZGMPxm/ZqmTXMbD+w5O63A+8ysz3AKeBJ4NpJxjaAnwG+WP/9aAN/4e5fMbN3ALj7p4A7gKuBB4GTwNsnFGuoJn17C7DPzE4B/wNc43k9sfc7wOH6v/Y/BN5eyLFb0a9/WR8/M9sMvB747VXrxnr89ISqiEiBpnJYRkSkdEruIiIFUnIXESmQkruISIGU3EVECqTkLiJSICV3EZECKbmLiBTo/wF71ENhAg0WoQAAAABJRU5ErkJggg==\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x18c1256e128>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plt.scatter(X[y==0,0], X[y==0,1], color='red')\n",
    "plt.scatter(X[y==1,0], X[y==1,1], color='blue')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 5,
   "metadata": {},
   "outputs": [],
   "source": [
    "from sklearn.preprocessing import StandardScaler\n",
    "\n",
    "standard_scaler = StandardScaler()\n",
    "standard_scaler.fit(X)\n",
    "X_standard = standard_scaler.transform(X)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 6,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearSVC(C=1000000000.0, class_weight=None, dual=True, fit_intercept=True,\n",
       "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
       "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
       "     verbose=0)"
      ]
     },
     "execution_count": 6,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "from sklearn.svm import LinearSVC\n",
    "\n",
    "svc = LinearSVC(C=1e9)\n",
    "svc.fit(X_standard, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 7,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_decision_boundary(model, axis):\n",
    "    x0, x1 = np.meshgrid(\n",
    "        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)),\n",
    "        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100))\n",
    "    )\n",
    "    x_new = np.c_[x0.ravel(), x1.ravel()]\n",
    "    \n",
    "    y_predict = model.predict(x_new)\n",
    "    zz = y_predict.reshape(x0.shape)\n",
    "    from matplotlib.colors import ListedColormap\n",
    "    custom_cmap = ListedColormap(['#EF9A9A', '#FFF59D', '#90CAF9'])\n",
    "    plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 8,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x18c0f9ea6a0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(svc, axis=[-3,3,-3,3])\n",
    "plt.scatter(X_standard[y==0,0], X_standard[y==0,1], color='red')\n",
    "plt.scatter(X_standard[y==1,0], X_standard[y==1,1], color='blue')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 9,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "LinearSVC(C=0.01, class_weight=None, dual=True, fit_intercept=True,\n",
       "     intercept_scaling=1, loss='squared_hinge', max_iter=1000,\n",
       "     multi_class='ovr', penalty='l2', random_state=None, tol=0.0001,\n",
       "     verbose=0)"
      ]
     },
     "execution_count": 9,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "# 把C变小, 更soft, 容错空间更大\n",
    "svc2 = LinearSVC(C=0.01)\n",
    "svc2.fit(X_standard, y)"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 10,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x18c12539940>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_decision_boundary(svc2, axis=[-3,3,-3,3])\n",
    "plt.scatter(X_standard[y==0,0], X_standard[y==0,1], color='red')\n",
    "plt.scatter(X_standard[y==1,0], X_standard[y==1,1], color='blue')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 11,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([[ 4.03242422, -2.49294501]])"
      ]
     },
     "execution_count": 11,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "svc.coef_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 12,
   "metadata": {},
   "outputs": [
    {
     "data": {
      "text/plain": [
       "array([0.95364272])"
      ]
     },
     "execution_count": 12,
     "metadata": {},
     "output_type": "execute_result"
    }
   ],
   "source": [
    "svc.intercept_"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 13,
   "metadata": {},
   "outputs": [],
   "source": [
    "def plot_svc_decision_boundary(model, axis):\n",
    "    x0, x1 = np.meshgrid(\n",
    "        np.linspace(axis[0], axis[1], int((axis[1]-axis[0])*100)),\n",
    "        np.linspace(axis[2], axis[3], int((axis[3]-axis[2])*100))\n",
    "    )\n",
    "    x_new = np.c_[x0.ravel(), x1.ravel()]\n",
    "    \n",
    "    y_predict = model.predict(x_new)\n",
    "    zz = y_predict.reshape(x0.shape)\n",
    "    from matplotlib.colors import ListedColormap\n",
    "    custom_cmap = ListedColormap(['#EF9A9A', '#FFF59D', '#90CAF9'])\n",
    "    plt.contourf(x0, x1, zz, linewidth=5, cmap=custom_cmap)\n",
    "    \n",
    "    w = model.coef_[0]\n",
    "    b = model.intercept_[0]\n",
    "    \n",
    "    # w0*x0 + w1*x1 + b = 0\n",
    "    # x1 = -w0/w1 * x0 - b/w1\n",
    "    plot_x = np.linspace(axis[0], axis[1], 200)\n",
    "    up_y = -w[0]/w[1] * plot_x - b/w[1] + 1/w[1]\n",
    "    down_y = -w[0]/w[1] * plot_x - b/w[1] - 1/w[1]\n",
    "    \n",
    "    up_index = (up_y >= axis[2]) & (up_y <= axis[3])\n",
    "    down_index = (down_y >= axis[2]) & (down_y <= axis[3])\n",
    "    plt.plot(plot_x[up_index], up_y[up_index], color='black')\n",
    "    plt.plot(plot_x[down_index], up_y[down_index], color='black')"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 14,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x18c128f8630>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_svc_decision_boundary(svc, axis=[-3,3,-3,3])\n",
    "plt.scatter(X_standard[y==0,0], X_standard[y==0,1], color='red')\n",
    "plt.scatter(X_standard[y==1,0], X_standard[y==1,1], color='blue')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": 15,
   "metadata": {},
   "outputs": [
    {
     "name": "stderr",
     "output_type": "stream",
     "text": [
      "C:\\Users\\fangyang\\Anaconda3\\lib\\site-packages\\matplotlib\\contour.py:967: UserWarning: The following kwargs were not used by contour: 'linewidth'\n",
      "  s)\n"
     ]
    },
    {
     "data": {
      "image/png": "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\n",
      "text/plain": [
       "<matplotlib.figure.Figure at 0x18c136104e0>"
      ]
     },
     "metadata": {},
     "output_type": "display_data"
    }
   ],
   "source": [
    "plot_svc_decision_boundary(svc2, axis=[-3,3,-3,3])\n",
    "plt.scatter(X_standard[y==0,0], X_standard[y==0,1], color='red')\n",
    "plt.scatter(X_standard[y==1,0], X_standard[y==1,1], color='blue')\n",
    "plt.show()"
   ]
  },
  {
   "cell_type": "code",
   "execution_count": null,
   "metadata": {},
   "outputs": [],
   "source": []
  }
 ],
 "metadata": {
  "kernelspec": {
   "display_name": "Python 3",
   "language": "python",
   "name": "python3"
  },
  "language_info": {
   "codemirror_mode": {
    "name": "ipython",
    "version": 3
   },
   "file_extension": ".py",
   "mimetype": "text/x-python",
   "name": "python",
   "nbconvert_exporter": "python",
   "pygments_lexer": "ipython3",
   "version": "3.6.4"
  }
 },
 "nbformat": 4,
 "nbformat_minor": 2
}
